package com.matrix.api.user;

import com.matrix.api.user.dto.UserRegisterDTO;
import com.matrix.api.user.vo.UserInfoVO;
import com.matrix.api.user.vo.UserLoginInfoVO;
import com.matrix.common.domain.PageResult;
import com.matrix.common.enums.UserTypeEnum;

import java.util.List;
import java.util.Map;

/**
 * @author 有点甜
 * @since 2025/7/25
 */
public interface UserApi {

    /**
     * 注册新用户
     *
     * @param registerDTO 注册信息
     */
    void register(UserRegisterDTO registerDTO);

    /**
     * 根据账号和用户类型查询用于登录的信息
     *
     * @param account  账号
     * @param userType 用户类型
     * @return 登录信息VO, 如果用户不存在则返回 null
     */
    UserLoginInfoVO findByAccount(String account, UserTypeEnum userType);

    /**
     * 根据 UID 列表批量获取用户信息
     *
     * @param uids 用户 UID 列表
     * @return 用户信息VO列表
     */
    List<UserInfoVO> getUsersByIds(List<Long> uids);

    /**
     * 分页查询用户列表
     *
     * @param pageNum  页码
     * @param pageSize 每页数量
     * @param phone    手机号
     * @param nickname 昵称
     * @return 分页的用户信息
     */
    PageResult<UserInfoVO> listUsersByPage(int pageNum, int pageSize, String phone, String nickname);

    /**
     * 更新用户状态
     *
     * @param userId 要更新的用户 UID
     * @param status 新的状态
     */
    void updateUserStatus(Long userId, Integer status);

    /**
     * 检查用户是否已收藏某个店铺
     *
     * @param userId 用户ID
     * @param shopId 店铺ID
     * @return true 如果已收藏, false 则未收藏
     */
    boolean checkFavoriteStatus(Long userId, Long shopId);

    /**
     * 获取用户收藏的所有店铺ID
     * @param userId 用户ID
     * @return 店铺ID列表
     */
    List<Long> listFavoritesInternal(Long userId);

    /**
     * 根据用户UID列表批量获取用户类型
     * @param uids 用户UID列表
     * @return Map, Key为uid, Value为UserTypeEnum
     */
    Map<Long, UserTypeEnum> getUserTypesByIds(List<Long> uids);
}
